遍历HashMap的几种方式以及如何获得Hashmap的key和Vaue |
您所在的位置:网站首页 › java foreach循环判断为最后一个 › 遍历HashMap的几种方式以及如何获得Hashmap的key和Vaue |
一般用的时候分为以下几种情况。 For-Each循环是Java5新引入的,遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。 1. 遍历key(比entrySet迭代快一点点)这个方法比entrySet迭代具有轻微的性能优势(大约快10%) for(Integer key: map.keySet()){ System.out.println(key); } 2. 遍历value(比entrySet迭代快一点点)这个方法比entrySet迭代具有轻微的性能优势(大约快10%) for(Integer value : map.values()){ System.out.println(value); } 3. 同时遍历key和value可以用以下几种方式。 3.1 用entrySet() + foreach (用!) for(Map.Entry entry : map.entrySet()){ System.out.println(entry.getKey()+" " +entry.getValue()); } 3.2 用entrySet() + 迭代器 (使劲用!)相当于获得键值对集合entry,并遍历 //返回的是entry类型的迭代器 Iterator it = map.entrySet().iterator(); //返回时没声明it的类型,it.next()需要强转 // Iterator it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry entry = it.next(); System.out.println(entry.getKey() + " " +entry.getValue()); } 3.3 keySet + foreach (耗时,不推荐)keySet拿到key,get一下就可以在同一个for循环内拿到value 这个方法看上去更简洁,但是实际上它更慢更低效,通过key得到value值更耗时。 for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println(key+ " " +value); } 3.4 用keySet+ 迭代器(耗时,不推荐)获得键集合,并遍历,拿到key,通过key去get值。 这个方法看上去更简洁,但是实际上它更慢更低效,通过key得到value值更耗时。 //返回时声明了it是Integet类型的迭代器,不用强转 //Iterator it = map.keySet().iterator(); //返回时没声明it的类型,it.next()需要强转 Iterator it = map.keySet().iterator(); while(it.hasNext()){ // Integer key = it.next(); Integer key = (Integer)it.next(); Integer value = map.get(key); System.out.println(key + "" + value); } 以上代码汇总后如下。 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HashMapTraversal { public static void main(String[] args){ HashMap map = new HashMap(); map.put(3, 6); map.put(2, 5); Traversal01(map); Traversal02(map); Traversal03(map); Traversal04(map); Traversal05(map); } // entrySet() 用for循环拿到entry public static void Traversal01(HashMap map){ for(Map.Entry entry : map.entrySet()){ System.out.println(entry.getKey()+" " +entry.getValue()); } } // keySet() 用for循环拿到key public static void Traversal00(HashMap map){ for(Integer key : map.keySet()){ Integer System.out.println(entry.getKey()+" " +entry.getValue()); } } // 单独拿到keys(用keySet()) 或者单独拿到values(map.values()) public static void Traversal02(HashMap map){ for(Integer key: map.keySet()){ System.out.println(key); } for(Integer value : map.values()){ System.out.println(value); } } // keySet拿到key,get一下就可以在同一个for循环内拿到value public static void Traversal03(HashMap map){ for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println(key+ " " +value); } } // entryset迭代器 获得键值对集合entry,并遍历 public static void Traversal04(HashMap map){ //返回的是entry类型的迭代器 Iterator it = map.entrySet().iterator(); //返回时没声明it的类型,it.next()需要强转 // Iterator it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry entry = it.next(); System.out.println(entry.getKey() + " " +entry.getValue()); } } // keyset迭代器 获得键集合,并遍历,拿到key,通过key去get值。 public static void Traversal05(HashMap map){ //返回时声明了it是Integet类型的迭代器,不用强转 //Iterator it = map.keySet().iterator(); //返回时没声明it的类型,it.next()需要强转 Iterator it = map.keySet().iterator(); while(it.hasNext()){ // Integer key = it.next(); Integer key = (Integer)it.next(); Integer value = map.get(key); System.out.println(key + "" + value); } } }
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |